#ifndef VNS_H
#define VNS_H

#include <iostream>
#include <fstream>
#include <strstream>
#include <string>
#include <list>
#include "rectangulo.h"
#include "heuristica.h"

#define K_MAX 3

using namespace std;
class VNS : public Heuristica {
   protected:
         int kMax; // Valor máximo de K
         int k; //Valor actual de la k
         
    public:
      /**
      * Constructor por defecto. 
      * En principio no se usa.
      * */
      VNS();

      /** 
       * Constructor
       * @param listado de los rectángulos a empaquetar
       * */
      VNS(list<Rectangulo> lista_in) ; //Llamamos al constructor padre

      /** 
      * Generar solución inicial 
      * Mecanismo de generación de soluciones iniciales
      * • Soluciones generadas aleatoriamente
      * • GRASP
      * • Soluciones distantes de los óptimos locales previamente encontrados
      * */
      //list<Rectangulo> generaInicial();


      list<Rectangulo> mejoraSolucion();
      
      /**
       * Intercambia k elementos consecutivos
       */
      list <Rectangulo> intercambia(int k);
      
      /**
       * Regla de parada y además lleva el control del parametro k
       */
      bool parada(int valor);
 

      /** ¿algo más? */
 
      /**
       * Destructor
       * */
      ~VNS(){}
 };
   #endif
